import numpy as np

# np.ones创建一个形状为(2, 3)的数组，元素全部为1
import torch

arr = np.ones((2, 3))
print("00\n",arr)
# 输出:
# [[1. 1. 1.]
#  [1. 1. 1.]]

#np.triu上三角矩阵 主对角线以下的元素全部设为0
attn_shape = (4, 4)
#k=0对角线全为1 k=1对角线全为0
subsequence_mask = np.triu(np.ones(attn_shape), k=0)

print("01\n",subsequence_mask)
"""K=0                K=1                K=2
   [[1. 1. 1. 1.]     [[0. 1. 1. 1.]     [[0. 0. 1. 1.]
   [0. 1. 1. 1.]      [0. 0. 1. 1.]      [0. 0. 0. 1.]
   [0. 0. 1. 1.]      [0. 0. 0. 1.]      [0. 0. 0. 0.]
   [0. 0. 0. 1.]]     [0. 0. 0. 0.]]     [0. 0. 0. 0.]]
"""

#np.ones 创建一个5*5全是1的矩阵
print("02",np.ones((5,5)))
"""
[[1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1.]]
"""
tensor = np.arange(6).reshape(3,2)
#按照axis=1下标为1的维度即第二个维度每行相加 从(3,2)->(3,1)
users_D = np.array(tensor.sum(axis=1)).squeeze()
"""
tensor       tensor.sum(axis=1)        np.array(tensor.sum(axis=1)).squeeze()
[[0 1]        [1 5 9]                  [1 5 9]
 [2 3]
 [4 5]]
"""
print("03",users_D)
"""

"""
tensor = np.arange(5).reshape(5,1)
tensor+=1
#power对每个元素进行指数运算 flatten(): 这个方法将多维数组展平为一维数组例输入为[3,4]输出[12]
d_inv = np.power(tensor, -0.5).flatten()
print("04",d_inv)

"""
np.mat是NumPy库中的一个函数，用于将数组转换成矩阵
"""
m1 = np.mat([[1,2,3],[4,5,6],[7,8,9]])
print("05",m1)
"""
[[1 2 3]
 [4 5 6]
 [7 8 9]]
"""

#np.ones用于创建一个形状和tensor[5,1]一样形状的全1数组
tensor = np.arange(5).reshape(5,1)
result = np.ones_like(tensor)
print("06",result)

